package com.mo.api.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyJdkTest {
    public static void main(String[] args) {
        //目标对象
     NoticeService noticeService=new NoticeServiceImpl();
     //创建代理对象---基于jdk方法创建
         //1.获取ClassLaoder
        ClassLoader classLoader=noticeService.getClass().getClassLoader();
        //2.获取目标对象实现的共同接口interface
        Class<?>[]Interface=noticeService.getClass().getInterfaces();
        //3.创建InvocationHandler（为被代理对象处理业务的对象）
        InvocationHandler handler=new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println(proxy.getClass().getName());

                System.out.println(method);

                Long[] array= (Long[]) args[0];
                System.out.println("args="+array[0]);
                System.out.println("args="+array[0]+","+array[1]+","+array[2]);

                return 10;
            }
        };


      NoticeService proxy=//代理对象
              (NoticeService) Proxy.newProxyInstance(
                      classLoader,//类加载器(负责加载底层产生的代理类型)
                      Interface,//代理类要实现的接口（和目标类一样的接口）
                      handler);//代理类处理器

        System.out.println(proxy.getClass().getName());
         //调用对象的方法，底层调用invoke方法
      proxy.deleteById(1L,2L,3L);
    }
}
